Sophisticated graphics packages have been used for some time in expensive computer design and graphics systems. Increased capabilities of graphics controllers and display systems, combined with standardized graphics languages, have made complex graphics functions available in even the most routine applications. For example, word processor, spread sheets and desktop publishing packages now include relatively sophisticated graphics capabilities. Three-dimensional (3D) displays have become common in games, animation, and multimedia communication and drawing packages.
The availability of sophisticated graphics in PCs has driven a demand for even greater graphics capabilities. To obtain these capabilities, graphics systems must be capable of performing more sophisticated functions in less time to process greater amounts of graphical data required by modern software applications. In particular, there is a continuing need for improvements in software algorithms and hardware implementations to draw three-dimensional objects using full color, texture mapping and transparency blending.
Improvements have been made in the hardware realm. Graphics processors and accelerators are available with software drivers that provide an interface between a host central processing unit and graphics processors. In general, the graphics software receives information for drawing objects on a computer screen, calculates certain basic parameters associated with the objects and provides input to the graphics processor in the form of a "display list" of parameters.
A graphics processor then uses the display list values in generating the graphics objects to be displayed. The graphics processor may use interpolation techniques where the fundamental information for the object to be drawn comprises a series of initial and incremental parameters or values. The graphics processor loads or otherwise receives the initial parameters for the pixels to be drawn, and interpolates to draw the object by incrementing the parameters until the object is completely drawn.
Existing graphics implementations that use display lists typically load data in a sequential format to a register file in the graphics processor. For each type of primitive, a particular set of data values is required to render that type of primitive. For example, a point to be drawn to a pixel grid may require an "x,y" location, color value, and a "z" or depth value for depth comparison. Corversely, if the primitive is a line, the parameters required may also include a slope to describe the line's direction in the x direction, and a count value to define the length in the y direction.
An example of a display list is shown below in Table 1:
TABLE 1 ______________________________________ ADDRESS NAME DESCRIPTION ______________________________________ 0X4000 X Initial X value 0X4004 Y Initial Y value 0X4008 R Initial Red value 0X400C G Initial Green value 0X4014 B Initial Blue value 0X4044 Z Initial depth value ______________________________________
The display list provides the parameters required to draw points, lines, and polygons. The display list provided from the central processor or from memory provides data for the various registers in the register file. The display parameter values are processed by the graphics processor to render the corresponding graphics objects.
Furthermore, not all the values available to define a primitive type are necessarily used to render a particular primitive. When executing a display list instruction, it is often necessary that only certain incremental data be present for execution after the initial primitive parameter data values have been executed (e.g. in a graphics system a draw point instruction may only require a x, y and color value). In prior art systems, if a primitive to be rendered does not require a particular parameter, then the register is skipped on a subsequent write operation by the graphics processor without any primitive value being loaded into the corresponding register in the register file. The disadvantage of only writing the necessary data is that the addresses are usually not sequential which causes the transfer by write operations over the system bus to the graphics subsystem to be slow.
The skipping of registers in the register file values for a primitive being rendered increases the amount of memory required to store the parameters. Such register skipping also increases the amount of time required to load register files in the graphics processor and also the volume of transactions on the system bus and the internal graphics processor bus during each stage of the rendering process.
Typically, in a register skipping scheme, the display list will include instructions requesting the graphics processor to skip certain registers in the register file after the initial primitive parameter values have been loaded into the register file. If during the rendering of the primitive, new incremental address values are required to complete the rendering of the primitive, an incremental X value may be stored in register A, an incremental Y value may be stored in register B and an incremental color value may be stored in register E. Thus, to write the register file, the graphics processor has to write to registers A, B and E respectively with the incremental primitive values.
Since the group of registers to be written with the incremental primitive values are not sequentially grouped, the graphics processor writes registers A and B and skips registers C and D on subsequent write cycles before writing to register E. In such a register skipping scheme, the graphics processor writes a series of address-data, address-data, address-data sequences in a non-consecutive manner to fill the register file.
Skipping registers C and D causes write operations in the graphics processor to slow down data access on the system bus and in effect substantially affect the bus bandwidth. As a result, the rendering operation requires more memory space, and takes more time than it would if the register skips were eliminated. It would be advantageous, therefore, if a graphics system were developed which could eliminate register skipping during a write operation of parameters during register loading and rendering of a graphics primitive.
It would be further advantageous if the host processor could transmit parameter values as part of the display list in a sequential group of registers which would allow the graphics processor to sequentially write to the register file regardless of whether a particular register contains data, without incurring any extra write or clock cycles.
Thus, an improved method of reducing the memory bandwidth of the graphics processor while rendering graphics primitives such as polygons within the graphics subsystem while maintaining the processing speed of CPU is needed.